home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_562 / intuisup / library / source.lzh / library_test.c < prev    next >
C/C++ Source or Header  |  1991-10-20  |  22KB  |  655 lines

  1.         /*************************************
  2.          *                                   *
  3.          *       Intuition Support v2.0      *
  4.          *   by Torsten Jürgeleit in 05/91   *
  5.          *                                   *
  6.          *            Test program           *
  7.          *                                   *
  8.          *************************************/
  9.  
  10.     /* Includes */
  11.  
  12. #include <exec/types.h>
  13. #include <exec/memory.h>
  14. #include <graphics/gfxbase.h>
  15. #include <graphics/text.h>
  16. #include <exec/types.h>
  17. #include <intuition/intuition.h>
  18. #include <functions.h>
  19. #include "intuisup.h"
  20.  
  21.     /* Defines */
  22.  
  23. #define WINDOW_WIDTH        600
  24. #define WINDOW_HEIGHT        200
  25. #define WINDOW_TITLE        (UBYTE *)" Library test "
  26. #define WINDOW_IDCMP        (CLOSEWINDOW | GADGET_IDCMP_FLAGS_ALL | MENUPICK)
  27.  
  28. #define RENDER_INFO_FLAGS    (USHORT)(RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
  29. #define OPEN_WINDOW_FLAGS    (USHORT)OPEN_WINDOW_FLAG_CENTER_WINDOW
  30.  
  31. #define MESSAGE_LEFT_EDGE    0
  32. #define MESSAGE_TOP_EDGE    (WINDOW_HEIGHT - MESSAGE_HEIGHT - 10)
  33. #define MESSAGE_WIDTH        WINDOW_WIDTH
  34. #define MESSAGE_HEIGHT        8
  35. #define MESSAGE_TEXT1        "Gadget %d text %s"
  36. #define MESSAGE_TEXT2        "Gadget %d value %ld"
  37. #define MESSAGE_TEXT3        " Menu no. %d menu item no. %d sub item no. %d selected "
  38. #define MESSAGE_TEXT_ATTR    &topaz80_attr
  39.  
  40.     /* Globals */
  41.  
  42. struct IntuitionBase  *IntuitionBase;
  43. struct Library        *IntuiSupBase;
  44.  
  45.     /* Statics */
  46.  
  47. STATIC struct NewWindow  test_new_window = { 0, 0, WINDOW_WIDTH,
  48.    WINDOW_HEIGHT, 0, 1, WINDOW_IDCMP, WINDOWCLOSE | WINDOWDRAG |
  49.    WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | ACTIVATE, NULL, NULL,
  50.    WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN };
  51. STATIC struct TextAttr  topaz60_attr = { (STRPTR)"topaz.font", TOPAZ_SIXTY,
  52.                            FS_NORMAL, FPF_ROMFONT },
  53.             topaz80_attr = { (STRPTR)"topaz.font", TOPAZ_EIGHTY,
  54.                            FS_NORMAL, FPF_ROMFONT };
  55.     /* Defines for test gadgets */
  56.  
  57. #define TEST_GADGET_BUTTON        0
  58. #define TEST_GADGET_BUTTON_IMAGE    1
  59. #define TEST_GADGET_CHECK        2
  60. #define TEST_GADGET_MX            3
  61. #define TEST_GADGET_STRING        4
  62. #define TEST_GADGET_INTEGER        5
  63. #define TEST_GADGET_SLIDER_HORIZ    6
  64. #define TEST_GADGET_SLIDER_VERT        7
  65. #define TEST_GADGET_SCROLLER_HORIZ    8
  66. #define TEST_GADGET_SCROLLER_VERT    9
  67. #define TEST_GADGET_CYCLE        10
  68. #define TEST_GADGET_COUNT        11
  69. #define TEST_GADGET_LISTVIEW        12
  70. #define TEST_GADGET_PALETTE        13
  71.  
  72. #define TEST_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  73. #define TEST_GADGET1_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  74. #define TEST_GADGET1_LEFT_EDGE        20
  75. #define TEST_GADGET1_TOP_EDGE        10
  76. #define TEST_GADGET1_WIDTH        ((6 + 2) * 10)
  77. #define TEST_GADGET1_HEIGHT        19
  78. #define TEST_GADGET1_TEXT        "_Button"
  79. #define TEST_GADGET1_TEXT_ATTR        &topaz60_attr
  80.  
  81. #define TEST_GADGET2_TYPE        GADGET_DATA_TYPE_BUTTON
  82. #define TEST_GADGET2_FLAGS        (GADGET_DATA_FLAG_BUTTON_TOGGLE | GADGET_DATA_FLAG_BUTTON_IMAGE | GADGET_DATA_FLAG_NO_BORDER | GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT | GADGET_DATA_FLAG_TEXT_COLOR2)
  83. #define TEST_GADGET2_LEFT_EDGE        120
  84. #define TEST_GADGET2_TOP_EDGE        15
  85. #define TEST_GADGET2_WIDTH        16
  86. #define TEST_GADGET2_HEIGHT        8
  87. #define TEST_GADGET2_TEXT        "_Image"
  88. #define TEST_GADGET2_TEXT_ATTR        &topaz60_attr
  89. #define TEST_GADGET2_NORMAL_RENDER    NULL    /* (LONG)&image1 */
  90. #define TEST_GADGET2_SELECT_RENDER    (BYTE *)&image2
  91.  
  92. #define TEST_GADGET3_TYPE        GADGET_DATA_TYPE_CHECK
  93. #define TEST_GADGET3_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  94. #define TEST_GADGET3_LEFT_EDGE        20
  95. #define TEST_GADGET3_TOP_EDGE        35
  96. #define TEST_GADGET3_WIDTH        0
  97. #define TEST_GADGET3_HEIGHT        0
  98. #define TEST_GADGET3_TEXT        "_Check gadget"
  99. #define TEST_GADGET3_TEXT_ATTR        &topaz60_attr
  100. #define TEST_GADGET3_CHECK_STATE    1
  101.  
  102. #define TEST_GADGET4_TYPE        GADGET_DATA_TYPE_MX
  103. #define TEST_GADGET4_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  104. #define TEST_GADGET4_LEFT_EDGE        20
  105. #define TEST_GADGET4_TOP_EDGE        65
  106. #define TEST_GADGET4_WIDTH        0
  107. #define TEST_GADGET4_HEIGHT        0
  108. #define TEST_GADGET4_TEXT        "Mutual e_xclude gadget"
  109. #define TEST_GADGET4_TEXT_ATTR        &topaz60_attr
  110. #define TEST_GADGET4_SPACING        2
  111. #define TEST_GADGET4_ACTIVE        1
  112. #define TEST_GADGET4_TEXT_ARRAY        &mx_array[0]
  113.  
  114. #define TEST_GADGET5_TYPE        GADGET_DATA_TYPE_STRING
  115. #define TEST_GADGET5_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE | GADGET_DATA_FLAG_TEXT_RIGHT)
  116. #define TEST_GADGET5_LEFT_EDGE        20
  117. #define TEST_GADGET5_TOP_EDGE        112
  118. #define TEST_GADGET5_WIDTH        68
  119. #define TEST_GADGET5_HEIGHT        0
  120. #define TEST_GADGET5_TEXT        "_String gadget"
  121. #define TEST_GADGET5_TEXT_ATTR        &topaz60_attr
  122. #define TEST_GADGET5_INPUT_LEN        10
  123. #define TEST_GADGET5_AUTO_ACTIVATE    ((LONG)TEST_GADGET_INTEGER << 16 | TEST_GADGET_INTEGER)
  124. #define TEST_GADGET5_INPUT_DEFAULT    "Test"
  125.  
  126. #define TEST_GADGET6_TYPE        GADGET_DATA_TYPE_INTEGER
  127. #define TEST_GADGET6_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_INPUT_AUTO_ACTIVATE | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  128. #define TEST_GADGET6_LEFT_EDGE        (20 + 14 * 10 + 8)
  129. #define TEST_GADGET6_TOP_EDGE        130
  130. #define TEST_GADGET6_WIDTH        68
  131. #define TEST_GADGET6_HEIGHT        0
  132. #define TEST_GADGET6_TEXT        "I_nteger gadget"
  133. #define TEST_GADGET6_TEXT_ATTR        &topaz60_attr
  134. #define TEST_GADGET6_INPUT_LEN        10
  135. #define TEST_GADGET6_AUTO_ACTIVATE    ((LONG)TEST_GADGET_STRING << 16 | TEST_GADGET_STRING)
  136. #define TEST_GADGET6_INPUT_DEFAULT    (BYTE *)123
  137.  
  138. #define TEST_GADGET7_TYPE        GADGET_DATA_TYPE_SLIDER
  139. #define TEST_GADGET7_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  140. #define TEST_GADGET7_LEFT_EDGE        20
  141. #define TEST_GADGET7_TOP_EDGE        150
  142. #define TEST_GADGET7_WIDTH        100
  143. #define TEST_GADGET7_HEIGHT        9
  144. #define TEST_GADGET7_TEXT        "S_lider gadget"
  145. #define TEST_GADGET7_TEXT_ATTR        &topaz60_attr
  146. #define TEST_GADGET7_MIN        -10
  147. #define TEST_GADGET7_MAX        10
  148. #define TEST_GADGET7_LEVEL        0
  149.  
  150. #define TEST_GADGET8_TYPE        GADGET_DATA_TYPE_SLIDER
  151. #define TEST_GADGET8_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_ORIENTATION_VERT | GADGET_DATA_FLAG_TEXT_BELOW)
  152. #define TEST_GADGET8_LEFT_EDGE        390
  153. #define TEST_GADGET8_TOP_EDGE        10
  154. #define TEST_GADGET8_WIDTH        18
  155. #define TEST_GADGET8_HEIGHT        50
  156. #define TEST_GADGET8_TEXT        "Sli_der gadget"
  157. #define TEST_GADGET8_TEXT_ATTR        &topaz60_attr
  158. #define TEST_GADGET8_MIN        -10
  159. #define TEST_GADGET8_MAX        10
  160. #define TEST_GADGET8_LEVEL        0
  161.  
  162. #define TEST_GADGET9_TYPE        GADGET_DATA_TYPE_SCROLLER
  163. #define TEST_GADGET9_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_LEFT | GADGET_DATA_FLAG_TEXT_COLOR2)
  164. #define TEST_GADGET9_LEFT_EDGE        (20 + 15 * 10 + 8)
  165. #define TEST_GADGET9_TOP_EDGE        165
  166. #define TEST_GADGET9_WIDTH        100
  167. #define TEST_GADGET9_HEIGHT        0
  168. #define TEST_GADGET9_TEXT        "Scr_oller gadget"
  169. #define TEST_GADGET9_TEXT_ATTR        &topaz60_attr
  170. #define TEST_GADGET9_VISIBLE        4
  171. #define TEST_GADGET9_TOTAL        20
  172. #define TEST_GADGET9_TOP        (BYTE *)10
  173.  
  174. #define TEST_GADGET10_TYPE        GADGET_DATA_TYPE_SCROLLER
  175. #define TEST_GADGET10_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_ORIENTATION_VERT | GADGET_DATA_FLAG_TEXT_ABOVE)
  176. #define TEST_GADGET10_LEFT_EDGE        490
  177. #define TEST_GADGET10_TOP_EDGE        20
  178. #define TEST_GADGET10_WIDTH        0
  179. #define TEST_GADGET10_HEIGHT        50
  180. #define TEST_GADGET10_TEXT        "Sc_roller gadget"
  181. #define TEST_GADGET10_TEXT_ATTR        &topaz60_attr
  182. #define TEST_GADGET10_VISIBLE        4
  183. #define TEST_GADGET10_TOTAL        20
  184. #define TEST_GADGET10_TOP        (BYTE *)10
  185.  
  186. #define TEST_GADGET11_TYPE        GADGET_DATA_TYPE_CYCLE
  187. #define TEST_GADGET11_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT | GADGET_DATA_FLAG_TEXT_COLOR2)
  188. #define TEST_GADGET11_LEFT_EDGE        265
  189. #define TEST_GADGET11_TOP_EDGE        80
  190. #define TEST_GADGET11_WIDTH        160
  191. #define TEST_GADGET11_HEIGHT        19
  192. #define TEST_GADGET11_TEXT        "C_ycle gadget"
  193. #define TEST_GADGET11_TEXT_ATTR        &topaz60_attr
  194. #define TEST_GADGET11_ACTIVE        2
  195. #define TEST_GADGET11_TEXT_ARRAY    &text_array[0]
  196.  
  197. #define TEST_GADGET12_TYPE        GADGET_DATA_TYPE_COUNT
  198. #define TEST_GADGET12_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_RIGHT)
  199. #define TEST_GADGET12_LEFT_EDGE        325
  200. #define TEST_GADGET12_TOP_EDGE        110
  201. #define TEST_GADGET12_WIDTH        80
  202. #define TEST_GADGET12_HEIGHT        12
  203. #define TEST_GADGET12_TEXT        "Co_unt gadget"
  204. #define TEST_GADGET12_TEXT_ATTR        &topaz80_attr
  205. #define TEST_GADGET12_MIN        100
  206. #define TEST_GADGET12_MAX        1000
  207. #define TEST_GADGET12_VALUE        (BYTE *)600
  208.  
  209. #define TEST_GADGET13_TYPE        GADGET_DATA_TYPE_LISTVIEW
  210. #define TEST_GADGET13_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  211. #define TEST_GADGET13_LEFT_EDGE        370
  212. #define TEST_GADGET13_TOP_EDGE        144
  213. #define TEST_GADGET13_WIDTH        104
  214. #define TEST_GADGET13_HEIGHT        35
  215. #define TEST_GADGET13_TEXT        "List _view gadget"
  216. #define TEST_GADGET13_TEXT_ATTR        &topaz60_attr
  217. #define TEST_GADGET13_SPACING        0
  218. #define TEST_GADGET13_TOP        1
  219. #define TEST_GADGET13_LIST        (BYTE *)&test_list
  220.  
  221. #define TEST_GADGET14_TYPE        GADGET_DATA_TYPE_PALETTE
  222. #define TEST_GADGET14_FLAGS        (GADGET_DATA_FLAG_HOT_KEY | GADGET_DATA_FLAG_TEXT_COLOR2)
  223. #define TEST_GADGET14_LEFT_EDGE        220
  224. #define TEST_GADGET14_TOP_EDGE        23
  225. #define TEST_GADGET14_WIDTH        150
  226. #define TEST_GADGET14_HEIGHT        25
  227. #define TEST_GADGET14_TEXT        "_Palette gadget"
  228. #define TEST_GADGET14_TEXT_ATTR        &topaz60_attr
  229. #define TEST_GADGET14_DEPTH        2
  230. #define TEST_GADGET14_COLOR_OFFSET    0
  231. #define TEST_GADGET14_ACTIVE_COLOR    (BYTE *)0
  232.  
  233.     /* Statics for test gadgets */
  234.  
  235. STATIC UWORD image1_data[] = {
  236.     0xffff, 0x8000, 0xbff0, 0xa00c, 0xa00c, 0xbff0, 0x8000, 0x8000,
  237.     0x0000, 0x0001, 0x0005, 0x1ff1, 0x1ff1, 0x0005, 0x0001, 0x7fff
  238. };
  239. STATIC struct Image  image1 = { 0, 0, 16, 8, 2, &image1_data[0], 3, 0, NULL };
  240. STATIC UWORD image2_data[] = {
  241.     0x0000, 0x000f, 0x3fff, 0x23fd, 0x3fcd, 0x7ff1, 0x7001, 0x7fff,
  242.     0xffff, 0x800e, 0x807e, 0x9ff8, 0x9ff0, 0xfe04, 0xf000, 0x8000
  243. };
  244. STATIC struct Image  image2 = { 0, 0, 16, 8, 2, &image2_data[0], 3, 0, NULL };
  245. STATIC BYTE *mx_array[] = {
  246.     "Fast File System", "Old File System", "Custom FileSystem", NULL
  247. };
  248. STATIC BYTE *text_array[] = {
  249.     "Amiga", "Workbench", "AmigaDOS", "Multitasking", "CLI", "ARexx",
  250.     "TeX", "Unix", NULL
  251. };
  252. STATIC struct List  test_list;
  253. STATIC struct GadgetData  test_gadget_data[] = {
  254.    {
  255.     TEST_GADGET1_TYPE,        /* gd_Type */
  256.     TEST_GADGET1_FLAGS,        /* gd_Flags */
  257.     TEST_GADGET1_LEFT_EDGE,        /* gd_LeftEdge */
  258.     TEST_GADGET1_TOP_EDGE,        /* gd_TopEdge */
  259.     TEST_GADGET1_WIDTH,        /* gd_Width */
  260.     TEST_GADGET1_HEIGHT,        /* gd_Height */
  261.     TEST_GADGET1_TEXT,        /* *gd_Text */
  262.     TEST_GADGET1_TEXT_ATTR,        /* *gd_TextAttr */
  263.     { 0, 0, 0 }
  264.    }, {
  265.     TEST_GADGET2_TYPE,        /* gd_Type */
  266.     TEST_GADGET2_FLAGS,        /* gd_Flags */
  267.     TEST_GADGET2_LEFT_EDGE,        /* gd_LeftEdge */
  268.     TEST_GADGET2_TOP_EDGE,        /* gd_TopEdge */
  269.     TEST_GADGET2_WIDTH,        /* gd_Width */
  270.     TEST_GADGET2_HEIGHT,        /* gd_Height */
  271.     TEST_GADGET2_TEXT,        /* *gd_Text */
  272.     TEST_GADGET2_TEXT_ATTR,        /* *gd_TextAttr */
  273.     { 0,
  274.     TEST_GADGET2_NORMAL_RENDER,    /* gd_ButtonNormalRender */
  275.     TEST_GADGET2_SELECT_RENDER    /* gd_ButtonSelectRender */
  276.     }
  277.    }, {
  278.     TEST_GADGET3_TYPE,        /* gd_Type */
  279.     TEST_GADGET3_FLAGS,        /* gd_Flags */
  280.     TEST_GADGET3_LEFT_EDGE,        /* gd_LeftEdge */
  281.     TEST_GADGET3_TOP_EDGE,        /* gd_TopEdge */
  282.     TEST_GADGET3_WIDTH,        /* gd_Width */
  283.     TEST_GADGET3_HEIGHT,        /* gd_Height */
  284.     TEST_GADGET3_TEXT,        /* *gd_Text */
  285.     TEST_GADGET3_TEXT_ATTR,        /* *gd_TextAttr */
  286.     {
  287.     TEST_GADGET3_CHECK_STATE,    /* gd_CheckState */
  288.     0, 0 }
  289.    }, {
  290.     TEST_GADGET4_TYPE,        /* gd_Type */
  291.     TEST_GADGET4_FLAGS,        /* gd_Flags */
  292.     TEST_GADGET4_LEFT_EDGE,        /* gd_LeftEdge */
  293.     TEST_GADGET4_TOP_EDGE,        /* gd_TopEdge */
  294.     TEST_GADGET4_WIDTH,        /* gd_Width */
  295.     TEST_GADGET4_HEIGHT,        /* gd_Height */
  296.     TEST_GADGET4_TEXT,        /* *gd_Text */
  297.     TEST_GADGET4_TEXT_ATTR,        /* *gd_TextAttr */
  298.     {
  299.     TEST_GADGET4_SPACING,        /* gd_MXSpacing */
  300.     TEST_GADGET4_ACTIVE,        /* gd_MXActiveEntry */
  301.     TEST_GADGET4_TEXT_ARRAY        /* gd_MXTextArray */
  302.     }
  303.    }, {
  304.     TEST_GADGET5_TYPE,        /* gd_Type */
  305.     TEST_GADGET5_FLAGS,        /* gd_Flags */
  306.     TEST_GADGET5_LEFT_EDGE,        /* gd_LeftEdge */
  307.     TEST_GADGET5_TOP_EDGE,        /* gd_TopEdge */
  308.     TEST_GADGET5_WIDTH,        /* gd_Width */
  309.     TEST_GADGET5_HEIGHT,        /* gd_Height */
  310.     TEST_GADGET5_TEXT,        /* *gd_Text */
  311.     TEST_GADGET5_TEXT_ATTR,        /* *gd_TextAttr */
  312.     {
  313.     TEST_GADGET5_INPUT_LEN,        /* gd_InputLen */
  314.     TEST_GADGET5_AUTO_ACTIVATE,    /* gd_InputActivatePrev/Next */
  315.     TEST_GADGET5_INPUT_DEFAULT    /* gd_InputDefault */
  316.     }
  317.    }, {
  318.     TEST_GADGET6_TYPE,        /* gd_Type */
  319.     TEST_GADGET6_FLAGS,        /* gd_Flags */
  320.     TEST_GADGET6_LEFT_EDGE,        /* gd_LeftEdge */
  321.     TEST_GADGET6_TOP_EDGE,        /* gd_TopEdge */
  322.     TEST_GADGET6_WIDTH,        /* gd_Width */
  323.     TEST_GADGET6_HEIGHT,        /* gd_Height */
  324.     TEST_GADGET6_TEXT,        /* *gd_Text */
  325.     TEST_GADGET6_TEXT_ATTR,        /* *gd_TextAttr */
  326.     {
  327.     TEST_GADGET6_INPUT_LEN,        /* gd_InputLen */
  328.     TEST_GADGET6_AUTO_ACTIVATE,    /* gd_InputActivatePrev/Next */
  329.     TEST_GADGET6_INPUT_DEFAULT    /* gd_InputDefault */
  330.     }
  331.    }, {
  332.     TEST_GADGET7_TYPE,        /* gd_Type */
  333.     TEST_GADGET7_FLAGS,        /* gd_Flags */
  334.     TEST_GADGET7_LEFT_EDGE,        /* gd_LeftEdge */
  335.     TEST_GADGET7_TOP_EDGE,        /* gd_TopEdge */
  336.     TEST_GADGET7_WIDTH,        /* gd_Width */
  337.     TEST_GADGET7_HEIGHT,        /* gd_Height */
  338.     TEST_GADGET7_TEXT,        /* *gd_Text */
  339.     TEST_GADGET7_TEXT_ATTR,        /* *gd_TextAttr */
  340.     {
  341.     TEST_GADGET7_MIN,        /* gd_SliderMin */
  342.     TEST_GADGET7_MAX,        /* gd_SliderMax */
  343.     TEST_GADGET7_LEVEL        /* gd_SliderLevel */
  344.     }
  345.    }, {
  346.     TEST_GADGET8_TYPE,        /* gd_Type */
  347.     TEST_GADGET8_FLAGS,        /* gd_Flags */
  348.     TEST_GADGET8_LEFT_EDGE,        /* gd_LeftEdge */
  349.     TEST_GADGET8_TOP_EDGE,        /* gd_TopEdge */
  350.     TEST_GADGET8_WIDTH,        /* gd_Width */
  351.     TEST_GADGET8_HEIGHT,        /* gd_Height */
  352.     TEST_GADGET8_TEXT,        /* *gd_Text */
  353.     TEST_GADGET8_TEXT_ATTR,        /* *gd_TextAttr */
  354.     {
  355.     TEST_GADGET8_MIN,        /* gd_SliderMin */
  356.     TEST_GADGET8_MAX,        /* gd_SliderMax */
  357.     TEST_GADGET8_LEVEL        /* gd_SliderLevel */
  358.     }
  359.    }, {
  360.     TEST_GADGET9_TYPE,        /* gd_Type */
  361.     TEST_GADGET9_FLAGS,        /* gd_Flags */
  362.     TEST_GADGET9_LEFT_EDGE,        /* gd_LeftEdge */
  363.     TEST_GADGET9_TOP_EDGE,        /* gd_TopEdge */
  364.     TEST_GADGET9_WIDTH,        /* gd_Width */
  365.     TEST_GADGET9_HEIGHT,        /* gd_Height */
  366.     TEST_GADGET9_TEXT,        /* *gd_Text */
  367.     TEST_GADGET9_TEXT_ATTR,        /* *gd_TextAttr */
  368.     {
  369.     TEST_GADGET9_VISIBLE,        /* gd_ScrollerVisible */
  370.     TEST_GADGET9_TOTAL,        /* gd_ScrollerTotal */
  371.     TEST_GADGET9_TOP        /* gd_ScrollerTop */
  372.     }
  373.    }, {
  374.     TEST_GADGET10_TYPE,        /* gd_Type */
  375.     TEST_GADGET10_FLAGS,        /* gd_Flags */
  376.     TEST_GADGET10_LEFT_EDGE,    /* gd_LeftEdge */
  377.     TEST_GADGET10_TOP_EDGE,        /* gd_TopEdge */
  378.     TEST_GADGET10_WIDTH,        /* gd_Width */
  379.     TEST_GADGET10_HEIGHT,        /* gd_Height */
  380.     TEST_GADGET10_TEXT,        /* *gd_Text */
  381.     TEST_GADGET10_TEXT_ATTR,    /* *gd_TextAttr */
  382.     {
  383.     TEST_GADGET10_VISIBLE,        /* gd_ScrollerVisible */
  384.     TEST_GADGET10_TOTAL,        /* gd_ScrollerTotal */
  385.     TEST_GADGET10_TOP        /* gd_ScrollerTop */
  386.     }
  387.    }, {
  388.     TEST_GADGET11_TYPE,        /* gd_Type */
  389.     TEST_GADGET11_FLAGS,        /* gd_Flags */
  390.     TEST_GADGET11_LEFT_EDGE,    /* gd_LeftEdge */
  391.     TEST_GADGET11_TOP_EDGE,        /* gd_TopEdge */
  392.     TEST_GADGET11_WIDTH,        /* gd_Width */
  393.     TEST_GADGET11_HEIGHT,        /* gd_Height */
  394.     TEST_GADGET11_TEXT,        /* *gd_Text */
  395.     TEST_GADGET11_TEXT_ATTR,    /* *gd_TextAttr */
  396.     {
  397.     0,                /* gd_CyclePad */
  398.     TEST_GADGET11_ACTIVE,        /* gd_CycleActive */
  399.     TEST_GADGET11_TEXT_ARRAY    /* gd_CycleTextArray */
  400.     }
  401.    }, {
  402.     TEST_GADGET12_TYPE,        /* gd_Type */
  403.     TEST_GADGET12_FLAGS,        /* gd_Flags */
  404.     TEST_GADGET12_LEFT_EDGE,    /* gd_LeftEdge */
  405.     TEST_GADGET12_TOP_EDGE,        /* gd_TopEdge */
  406.     TEST_GADGET12_WIDTH,        /* gd_Width */
  407.     TEST_GADGET12_HEIGHT,        /* gd_Height */
  408.     TEST_GADGET12_TEXT,        /* *gd_Text */
  409.     TEST_GADGET12_TEXT_ATTR,    /* *gd_TextAttr */
  410.     {
  411.     TEST_GADGET12_MIN,        /* gd_CountMin */
  412.     TEST_GADGET12_MAX,        /* gd_CountMax */
  413.     TEST_GADGET12_VALUE        /* gd_CountValue */
  414.     }
  415.    }, {
  416.     TEST_GADGET13_TYPE,        /* gd_Type */
  417.     TEST_GADGET13_FLAGS,        /* gd_Flags */
  418.     TEST_GADGET13_LEFT_EDGE,    /* gd_LeftEdge */
  419.     TEST_GADGET13_TOP_EDGE,        /* gd_TopEdge */
  420.     TEST_GADGET13_WIDTH,        /* gd_Width */
  421.     TEST_GADGET13_HEIGHT,        /* gd_Height */
  422.     TEST_GADGET13_TEXT,        /* *gd_Text */
  423.     TEST_GADGET13_TEXT_ATTR,    /* *gd_TextAttr */
  424.     {
  425.     TEST_GADGET13_SPACING,        /* gd_ListViewSpacing */
  426.     TEST_GADGET13_TOP,        /* gd_ListViewTop */
  427.     TEST_GADGET13_LIST        /* gd_ListViewList */
  428.     }
  429.    }, {
  430.     TEST_GADGET14_TYPE,        /* gd_Type */
  431.     TEST_GADGET14_FLAGS,        /* gd_Flags */
  432.     TEST_GADGET14_LEFT_EDGE,    /* gd_LeftEdge */
  433.     TEST_GADGET14_TOP_EDGE,        /* gd_TopEdge */
  434.     TEST_GADGET14_WIDTH,        /* gd_Width */
  435.     TEST_GADGET14_HEIGHT,        /* gd_Height */
  436.     TEST_GADGET14_TEXT,        /* *gd_Text */
  437.     TEST_GADGET14_TEXT_ATTR,    /* *gd_TextAttr */
  438.     {
  439.     TEST_GADGET14_DEPTH,        /* gd_PaletteDepth */
  440.     TEST_GADGET14_COLOR_OFFSET,    /* gd_PaletteColorOffset */
  441.     TEST_GADGET14_ACTIVE_COLOR    /* gd_PaletteActiveColor */
  442.     }
  443.    }, {
  444.     INTUISUP_DATA_END        /* end of gadget data array */
  445.    }
  446. };
  447.     /* Defines for test menus */
  448.  
  449. #define TEST_MENU_TEXT_ATTR    &topaz60_attr
  450.  
  451.     /* Statics for test menus */
  452.  
  453. STATIC struct MenuData  test_menu_data[] = {
  454.    {
  455.     MENU_DATA_TYPE_TITLE, 0, "Menu 0", NULL, 0
  456.    }, {
  457.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_ATTRIBUTE | MENU_DATA_FLAG_SELECTED, "Item 0.0", "0", ~(1L << 0)
  458.    }, {
  459.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_ATTRIBUTE, "Item 0.1", "1", ~(1L << 1)
  460.    }, {
  461.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_HIGH_BOX, "Item 0.2", NULL, 0
  462.    }, {
  463.           MENU_DATA_TYPE_SUBITEM, 0, "Item 0.2.0", "A", 0
  464.    }, {
  465.           MENU_DATA_TYPE_SUBITEM, 0, "Item 0.2.1", "B", 0
  466.    }, {
  467.        MENU_DATA_TYPE_ITEM, 0, "Item 0.3", NULL, 0
  468.    }, {
  469.     MENU_DATA_TYPE_TITLE,  0, "Menu 1", NULL, 0
  470.    }, {
  471.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_HIGH_BOX, "Item 1.0", "C", 0
  472.    }, {
  473.        MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_EMPTY_LINE, "Item 1.1", "D", 0
  474.    }, {
  475.        MENU_DATA_TYPE_ITEM, 0, "Item 1.2", NULL, 0
  476.    }, {
  477.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.2.0", "E", 0
  478.    }, {
  479.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.2.1", "F", 0
  480.    }, {
  481.        MENU_DATA_TYPE_ITEM, 0, "Item 1.3", NULL, 0
  482.    }, {
  483.           MENU_DATA_TYPE_SUBITEM, 0, "Item 1.3.0", "G", 0
  484.    }, {
  485.           MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_EMPTY_LINE, "Item 1.3.1", "H", 0
  486.    }, {
  487.        MENU_DATA_TYPE_ITEM, 0, "Item 1.4", "I", 0
  488.    }, {
  489.     INTUISUP_DATA_END        /* mark end of menu data */
  490.    }
  491. };
  492.     /* Prototypes */
  493.  
  494. VOID test_action(APTR ri, struct Window  *win, APTR gl, APTR ml);
  495. BOOL build_test_list(VOID);
  496. VOID free_test_list(VOID);
  497.  
  498.     /* Library test */
  499.  
  500.    LONG
  501. main(VOID)
  502. {
  503.    struct Window  *win;
  504.    APTR ri, gl, ml;
  505.  
  506.    if (IntuitionBase = OpenLibrary("intuition.library", 0L)) {
  507.       if (IntuiSupBase = OpenLibrary(IntuiSupName, IntuiSupVersion)) {
  508.      if (build_test_list() == TRUE) {
  509.         if (ri = IGetRenderInfo(NULL, RENDER_INFO_FLAGS)) {
  510.            if (win = IOpenWindow(ri, &test_new_window,
  511.                                OPEN_WINDOW_FLAGS)) {
  512.           test_gadget_data[TEST_GADGET_BUTTON_IMAGE].gd_SpecialData.gd_ButtonData.gd_ButtonNormalRender = &image1;
  513.           if (gl = ICreateGadgets(ri, &test_gadget_data[0], 0, 0)) {
  514.              if (ml = ICreateMenu(ri, win, &test_menu_data[0],
  515.                              TEST_MENU_TEXT_ATTR)) {
  516.             IDisplayGadgets(win, gl);
  517.             IAttachMenu(win, ml);
  518.             test_action(ri, win, gl, ml);
  519.             IRemoveMenu(ml);
  520.             IRemoveGadgets(gl);
  521.             IFreeMenu(ml);
  522.              }
  523.              IFreeGadgets(gl);
  524.           }
  525.           CloseWindow(win);
  526.            }
  527.            IFreeRenderInfo(ri);
  528.         }
  529.         free_test_list();
  530.      }
  531.      CloseLibrary(IntuiSupBase);
  532.       }
  533.       CloseLibrary(IntuitionBase);
  534.    }
  535.    return(0L);
  536. }
  537.     /* Perform IDCMP action */
  538.  
  539.    VOID
  540. test_action(APTR ri, struct Window  *win, APTR gl, APTR ml)
  541. {
  542.    struct RastPort      *rp = win->RPort;
  543.    struct MsgPort       *up = win->UserPort;
  544.    struct IntuiMessage  *msg;
  545.    BYTE   *format, buffer[80];
  546.    USHORT code;
  547.    BOOL   input = TRUE, keepon = TRUE;
  548.  
  549.    /* waiting for close window event */
  550.    do {
  551.       WaitPort(up);
  552.       while (msg = IGetMsg(up)) {
  553.      code = msg->Code;
  554.      switch (msg->Class) {
  555.         case CLOSEWINDOW :
  556.            keepon = FALSE;
  557.            break;
  558.         case ISUP_ID :
  559.            if (code == TEST_GADGET_STRING) {
  560.           format = MESSAGE_TEXT1;
  561.            } else {
  562.           format = MESSAGE_TEXT2;
  563.            }
  564.            sprintf(&buffer[0], format, code, msg->IAddress);
  565.            IClearRenderWindow(ri, win, MESSAGE_LEFT_EDGE,
  566.             MESSAGE_TOP_EDGE, MESSAGE_LEFT_EDGE + MESSAGE_WIDTH - 1,
  567.                      MESSAGE_TOP_EDGE + MESSAGE_HEIGHT - 1);
  568.            IPrintText(ri, win, &buffer[0], 0, MESSAGE_TOP_EDGE,
  569.                 TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_CENTER |
  570.                   TEXT_DATA_FLAG_COLOR2, MESSAGE_TEXT_ATTR);
  571.            /* change gadgets */
  572.            switch (code) {
  573.           case TEST_GADGET_CHECK :
  574.              if (msg->IAddress) {
  575.             ISetGadgetAttributes(gl, TEST_GADGET_LISTVIEW, 0L,
  576.                 USE_CURRENT_VALUE, (ULONG)TEST_GADGET13_TOP,
  577.                         (VOID *)TEST_GADGET13_LIST);
  578.              } else {
  579.             ISetGadgetAttributes(gl, TEST_GADGET_LISTVIEW,
  580.                    GADGET_DATA_FLAG_DISABLED, USE_CURRENT_VALUE,
  581.                        USE_CURRENT_VALUE, (VOID *)NULL);
  582.              }
  583.              break;
  584.           case TEST_GADGET_BUTTON :
  585.              if (input == FALSE) {
  586.             ISetGadgetAttributes(gl, TEST_GADGET_INTEGER, 0L,
  587.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  588.                          (VOID *)USE_CURRENT_VALUE);
  589.             input = TRUE;
  590.              } else {
  591.             ISetGadgetAttributes(gl, TEST_GADGET_INTEGER,
  592.                    GADGET_DATA_FLAG_DISABLED, USE_CURRENT_VALUE,
  593.                   USE_CURRENT_VALUE, (VOID *)USE_CURRENT_VALUE);
  594.             input = FALSE;
  595.              }
  596.              break;
  597.            }
  598.            break;
  599.         case MENUPICK :
  600.            while (code != MENUNULL) {
  601.           sprintf(&buffer[0], MESSAGE_TEXT3,
  602.                   (MENUNUM(code) != NOMENU ? MENUNUM(code) : 0),
  603.                   (ITEMNUM(code) != NOITEM ? ITEMNUM(code) : 0),
  604.                 (SUBNUM(code) != NOSUB ? SUBNUM(code) : 0));
  605.           IClearRenderWindow(ri, win, MESSAGE_LEFT_EDGE,
  606.             MESSAGE_TOP_EDGE, MESSAGE_LEFT_EDGE + MESSAGE_WIDTH - 1,
  607.                      MESSAGE_TOP_EDGE + MESSAGE_HEIGHT - 1);
  608.           IPrintText(ri, win, &buffer[0], 0, MESSAGE_TOP_EDGE,
  609.                 TEXT_DATA_TYPE_TEXT, TEXT_DATA_FLAG_CENTER |
  610.                   TEXT_DATA_FLAG_COLOR2, MESSAGE_TEXT_ATTR);
  611.           code = IMenuItemAddress(ml, code)->NextSelect;
  612.            }
  613.            break;
  614.      }
  615.      IReplyMsg(msg);
  616.       }
  617.    } while (keepon == TRUE);
  618. }
  619.     /* Build test list */
  620.  
  621.    BOOL
  622. build_test_list(VOID)
  623. {
  624.    struct List  *list = &test_list;
  625.    struct Node  *node;
  626.    BYTE **text = &text_array[0];
  627.    BOOL success = TRUE;
  628.  
  629.    NewList(list);
  630.    while (*text) {
  631.       if (node = AllocMem((LONG)sizeof(struct Node), (LONG)MEMF_PUBLIC |
  632.                                   MEMF_CLEAR)) {
  633.      node->ln_Name = *text++;
  634.      AddTail(list, node);
  635.       } else {
  636.      free_test_list();
  637.      success = FALSE;
  638.      break;
  639.       }
  640.    }
  641.    return(success);
  642. }
  643.     /* Free test list */
  644.  
  645.    VOID
  646. free_test_list(VOID)
  647. {
  648.    struct List  *list = &test_list;
  649.    struct Node  *node;
  650.  
  651.    while (node = RemHead(list)) {
  652.       FreeMem(node, (LONG)sizeof(struct Node));
  653.    }
  654. }
  655.